/*
 * Copyright (C) 2011 Markus Junginger, greenrobot (http://greenrobot.de)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.mlizhi.base.dao.test;

import com.mlizhi.base.dao.AbstractDao;
import com.mlizhi.base.dao.DaoLog;

/**
 * Base class for DAOs having a long/Long as a PK, which is quite common.
 * 
 * @author Markus
 * 
 * @param <D>
 *DAO class
 * @param <T>
 *Entity type of the DAO
 */
public abstract class AbstractDaoTestLongPk<D extends AbstractDao<T, Long>, T> extends AbstractDaoTestSinglePk<D, T, Long> {

public AbstractDaoTestLongPk(Class<D> daoClass) {
super(daoClass);
}

/** {@inheritDoc} */
protected Long createRandomPk() {
return random.nextLong();
}

public void testAssignPk() {
if (daoAccess.isEntityUpdateable()) {
T entity1 = createEntity(null);
if (entity1 != null) {
T entity2 = createEntity(null);

dao.insert(entity1);
dao.insert(entity2);

Long pk1 = daoAccess.getKey(entity1);
assertNotNull(pk1);
Long pk2 = daoAccess.getKey(entity2);
assertNotNull(pk2);

assertFalse(pk1.equals(pk2));

assertNotNull(dao.load(pk1));
assertNotNull(dao.load(pk2));
} else {
DaoLog.d("Skipping testAssignPk for " + daoClass + " (createEntity returned null for null key)");
}
} else {
DaoLog.d("Skipping testAssignPk for not updateable " + daoClass);
}
}


}